<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>

<body>
    <script>
        let departTag = [
            {
                label: "皮肤科",
                twoTagId: "5d1084480e8e59729c50df3d",
                value: "皮肤科"
            },
            {
                label: "眼科综合",
                twoTagId: "5d1084480e8e59729c50df40",
                value: "眼科"
            },
            {
                label: "胸外科",
                twoTagId: "5d1084470e8e59729c50df22",
                value: "外科"
            },
            {
                label: "眼科综合",
                twoTagId: "5d1084480e8e59729c50df40",
                value: "眼科"
            },
            {
                label: "消化内科",
                twoTagId: "5d1084470e8e59729c50df18",
                value: "内科"
            },
            {
                label: "眼科综合",
                twoTagId: "5d1084480e8e59729c50df40",
                value: "眼科"
            },
            {
                label: "皮肤科",
                twoTagId: "5d1084480e8e59729c50df3d",
                value: "皮肤科"
            },
        ]
        /* 数组去重slice().sort()*/
        /*
        let twoId = [];
        departTag.map(item=>{
            twoId.push(item.twoTagId);
        })
        let nary = twoId.slice().sort();
        let naryS = [];
        for (let i = 0; i < departTag.length; i++) {
            if (nary[i] == nary[i + 1]) {
               console.log(nary[i]);
            }else{
                naryS.push(nary[i]);
            }
        }
        console.log(naryS);
        */
        /* 判断属性值*/
        /**
        let repeatRrr = [];
        let repeatRrrS = [];
        for (let i = 0; i < departTag.length; i++) {
            if (!repeatRrr.includes(departTag[i].twoTagId)) {
                repeatRrr.push(departTag[i].twoTagId);
                repeatRrrS.push(departTag[i]);
            }
        }
        console.log(repeatRrr);
        console.log(repeatRrrS);
        */
        /*使用reduce()方法*/
        /**
        let obj = {};
        let departTagS = departTag.reduce(function(item, next) {
            obj[next.twoTagId] ? '' : obj[next.twoTagId] = true && item.push(next);
            return item;
        }, []);
        console.log(departTagS);
        console.log(departTag);
         */
        /**
        var  arr = [1, 2, 3, 4];
        var sum = 10
        sum = arr.reduce(function(prev, cur, index, arr) {
            console.log(prev, cur, index);
            return prev + cur;
        }, 10); // 注意这里设置了初始值
        console.log(arr, sum);
        */

        /**
         * reduce()
         * arr.reduce(callback, initialValue)
         *
         * reduce会为数组中的每个元素执行回调函数，回调函数(callback)有四个参数，分别为
         * prev: 上一次执行完返回的值(包括初始值)
         * item: 当前的元素(当前执行回调函数的元素)
         * index: 当前元素位置(下标index值)
         * arr: 原数组(执行的当前数组)
         *
         * initialValue： 可选，第一次执行回调函数的初始值(也就是第一次执行回调函数时, prev的初始值，可以给他赋值为一个[], {}或者一个数字)
         *
         * */
        /**数字求和*/
        /**
        let arr = [1, 2, 3, 4, 5];
        let sum = arr.reduce((prev, item) => {
            console.log(prev, item);
            return prev + item;
        });
        console.log(sum);
         */
        /** 添加一个初始值*/
        /**
        let arr = [1, 2, 3, 4, 5];
        let sum = arr.reduce((prev, item) => {
            console.log(prev, item);
            return prev + item;
        }, 10); // 这里设置了初始值
        console.log(sum);
         */
        // 如果没有添加初始值，第一次回调从数组的index为1的地方开始执行，而添加初始值后第一次回调从数组的index为0的地方开始执行
        /**不设置初始值会报错*/
        /**
        let arr = [1, 2, 3, 4, 5];
        let Arr = arr.reduce((prev, item) => {
            console.log(prev, item);
            prev.push(item);
            return prev;
        }, []); // 设置初始值后
        console.log(Arr);
         */
        // 使用的时候最好给一个初始值，否则会报错
        // reduce() 作用
        /**1. 数字求和，上面已经介绍*/
        /**2. 数字阶乘*/
        /**
        let arr = [1, 2, 3, 4, 5];
        let sum = arr.reduce((prev, item) => {
            console.log(prev, item);
            return prev * item;
        }, 1);
        console.log(sum);
        */
        /**3. 数组去重*/
        /**
        let Arr = [1, 3, 2, 2, 4, 5]
        let arr = Arr.reduce((prev, item) => {
            if (!prev.includes(item)){
             prev.push(item);
            }
            return prev;
        }, []);
        console.log(arr);
        */
        /*4. 计算数组中每个元素出现的个数*/
        /**
        let Arr = [1, 3, 2, 2, 4, 5];
        let arr = Arr.reduce((prev, item) => {
            if (item in prev) {
                prev[item]++;
            } else {
                prev[item] = 1;
            }
            return prev;
        }, {});
        console.log(arr);
        */
        /*5. 除去数组中的嵌套数组*/
        /***
        let Arr = [[2, 5, 9], [0, 3]];
        let arr = Arr.reduce((prev, item) => {
            // 使用concat() 或者[...]将两个数组合并
            // let as = prev.concat(item);
            let as = [...prev, ...item];
            return as;
        }, []);
        console.log(arr);
        */
    </script>
</body>

</html>
